precision mediump float;

uniform sampler2D u_ScreenTexture; // 输入的屏幕纹理
uniform float u_Frequency;          // 波纹频率
uniform float u_Amplitude;          // 波纹幅度
uniform float u_RippleRate;         // 波纹扩散速率
uniform float u_WaveAmplitude;      // 波的幅度
uniform vec2 u_TouchPosition;       // 触控点（归一化坐标）

varying vec2 vTextureCoord;         // 从顶点着色器传来的纹理坐标
uniform float u_Time;                // 当前时间

void main() {
    vec2 texCoord = vTextureCoord; // 当前片元的纹理坐标
    vec2 centerPosition = u_TouchPosition; // 触控点

    // 计算当前片元到触控点的距离
    float distanceToCenter = length(texCoord - centerPosition);

    // 使用平滑的波纹计算
    float ripple = sin(distanceToCenter * u_Frequency - u_RippleRate * u_Time) * u_Amplitude;

    // 将波纹效果限制在某个范围内，防止过度扭曲
    ripple *= exp(-distanceToCenter * 3.0); // 使用指数衰减，减弱远离中心的影响

    // 更新纹理坐标
    vec2 rippleOffset = ripple * vec2(cos(distanceToCenter * 10.0), sin(distanceToCenter * 10.0)) * u_WaveAmplitude;
    texCoord += rippleOffset;

    // 采样当前纹理颜色
    vec4 color = texture2D(u_ScreenTexture, texCoord);

    // 输出最终颜色
    gl_FragColor = color;
}
